package com.atguigu.schedule.service.impl;

import com.atguigu.schedule.service.FileConversionService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import java.io.File;
import java.util.List;

/**
 * 自动文件转换服务
 */
@Service
@RequiredArgsConstructor
@Slf4j
public class AutoFileConversionServiceImpl {
    
    private final FileConversionService fileConversionService;
    
    @Value("${recording.output-path:/recordings}")
    private String outputPath;
    
    /**
     * 定时检查并转换mp4.tmp文件
     * 每5分钟执行一次
     */
    @Scheduled(fixedRate = 300000) // 5分钟 = 300000毫秒
    public void autoConvertTmpFiles() {
        try {
            log.debug("开始自动检查mp4.tmp文件...");
            
            List<File> tmpFiles = fileConversionService.getTmpFiles(outputPath);
            if (tmpFiles.isEmpty()) {
                log.debug("未发现mp4.tmp文件");
                return;
            }
            
            log.info("发现 {} 个mp4.tmp文件，开始自动转换", tmpFiles.size());
            
            List<String> convertedFiles = fileConversionService.batchConvertTmpFiles(outputPath);
            
            if (!convertedFiles.isEmpty()) {
                log.info("自动转换完成，成功转换 {} 个文件", convertedFiles.size());
                for (String file : convertedFiles) {
                    log.info("转换文件: {}", file);
                }
            }
            
        } catch (Exception e) {
            log.error("自动转换mp4.tmp文件失败: {}", e.getMessage(), e);
        }
    }
    
    /**
     * 清理过期的临时文件
     * 每天凌晨2点执行
     */
    @Scheduled(cron = "0 0 2 * * ?")
    public void cleanupExpiredTmpFiles() {
        try {
            log.info("开始清理过期的临时文件...");
            
            List<File> tmpFiles = fileConversionService.getTmpFiles(outputPath);
            int cleanedCount = 0;
            
            for (File tmpFile : tmpFiles) {
                // 删除超过24小时的临时文件
                long fileAge = System.currentTimeMillis() - tmpFile.lastModified();
                long hours24 = 24 * 60 * 60 * 1000; // 24小时
                
                if (fileAge > hours24) {
                    if (tmpFile.delete()) {
                        cleanedCount++;
                        log.info("删除过期临时文件: {}", tmpFile.getName());
                    } else {
                        log.warn("无法删除过期临时文件: {}", tmpFile.getName());
                    }
                }
            }
            
            log.info("清理完成，删除了 {} 个过期临时文件", cleanedCount);
            
        } catch (Exception e) {
            log.error("清理过期临时文件失败: {}", e.getMessage(), e);
        }
    }
}
